package redisutil

import (
	"context"
	"errors"
	"fmt"
	"github.com/beego/beego/v2/client/cache"
	_ "github.com/beego/beego/v2/client/cache/redis"
	"github.com/beego/beego/v2/core/logs"
	beego "github.com/beego/beego/v2/server/web"
	"time"
)

var redisCache cache.Cache

func init() {
	key, err := beego.AppConfig.String("redis::key")
	conn, err := beego.AppConfig.String("redis::conn")
	if err != nil {
		logs.Error("获取配置中的连接参数出错")
		panic("获取配置中的连接参数出错")
	}
	dbNum, err := beego.AppConfig.String("redis::dbNum")
	if err != nil {
		logs.Error("获取配置中的数据库编号参数出错")
		panic("获取配置中的数据库编号参数出错")
	}
	password, err := beego.AppConfig.String("redis::password")
	if err != nil {
		logs.Error("获取配置中的密码参数出错")
		panic("获取配置中的密码参数出错")
	}

	redisConfig := fmt.Sprintf(`{"key": "%s", "conn": "%s", "dbNum": "%s", "password": "%s"}`, key, conn, dbNum, password)
	logs.Info("使用redis配置如下：\n", redisConfig)
	redisCache, err = cache.NewCache("redis", redisConfig)
	if err != nil {
		logs.Error("创建redis缓存失败", err)
		panic("创建redis缓存失败")
	}
}

func SetStr(key string, val string, timeout time.Duration) error {
	return redisCache.Put(context.TODO(), key, val, timeout)
}

func GetStr(key string) (string, error) {
	val, err := redisCache.Get(context.TODO(), key)
	if val == nil {
		return "", errors.New("未获取到数据")
	}
	return string(val.([]byte)), err
}

func Del(key string) error {
	return redisCache.Delete(context.TODO(), key)
}

func IsExist(key string) (bool, error) {
	return redisCache.IsExist(context.TODO(), key)
}
